AWS ParallelCluster用語・サービス名を調べる
こんにちは網走の大村です。
AWS ParallelClusterのBlack Belt Online Seminarを視聴したのですが、HPC業界では一般的な用語・サービスが馴染みがなさすぎてわかりませんでした。基本的な用語を調べた備忘録です。
【AWS Black Belt Online Seminar】AWS ParallelCluster ではじめるクラウドHPC - YouTube
AWS ParallelCluster とは
並列コンピューティングで膨大な計算処理を実行する環境を簡単に構築できるサービスです。クラウドサービスの特徴を活かし計算処理をするマシンを自動で必要な台数起動し、計算が終わったら終了してくれます。コスト効率よく膨大な計算処理を並列で実行可能です。
HPC(High Performance Computing)ってなに
そもそもHPCとは何の意味なのでしょうか? 調べてみると計算量の多い処理をこなすための環境で巨大なスパコンか、多数のサーバ郡が一般的には必要ということがわかりました。ハイパフォーマンスという名前の通りです。
Wikipediaより引用
1980年代以前はベクトル計算機が主流であったが、近年ではスカラー計算機を超並列にする方向が盛んである。HPC用クラスタをHigh-Performance Computing Cluster、HPCC(en:HPCC)という。システムの構築や利用には高いレベルの技術的スキルが不可欠であるが、汎用の部品で構成することができる。柔軟性、演算性能の面で優れ、比較的低コストであるため、並列コンピューティングによるHPCはスーパーコンピュータ業界に普及しつつある
weblio辞書より引用
ハイパフォーマンスコンピューティングとは、単位時間当たりの計算量が非常に多い計算処理のことである。ハイパフォーマンスコンピューティングは、実施に膨大な時間やコストがかかる大規模な実験の代用や、不確定要素の多さから実験が困難な自然科学現象の解明、といった目的で行われることが多い。
ジョブスケジューラ(ジョブ管理システム)ってなに
ジョブスケジューラは、ユーザが「ジョブ(計算するスクリプトやデータ)」をジョブスケジューラに投げると、ジョブスケジューラはジョブをキューとして管理し、よしなに計算処理してくれるマシンに仕事を割り当て効率よく管理してくれる仕組み。
ジョブスケジューラの種類
「SGE, Torque, Slurm に対応」と書いてありますが、私にはまったく馴染みのない言葉です。 ここで挙げられた名前はグリッドコンピューティング分野で一般的なジョブスケジューラでした。
SGE(Sun of Grid Engine)
注意: AWS ParallelClusterでは将来のリリースでSGEのサポートが削除される予定。
TORQUE(Terascale Open-source Resource and QUEue Manager)
注意: AWS ParallelClusterでは将来のリリースでTORQUEのサポートが削除される予定。
Slurm
AWS ParallelClusterのデフォルトのジョブスケジューラはSlurmでした。他がAWS ParallelClusterでのサポート終了予定だからそうなりますよね。
ジョブスケジューラとAWS ParallelCluster
既存のHPC環境を利用者には馴染みのあるジョブスケジューラをAWS ParallelClusterでも使えるので移行が容易につながるわけですね。
MPI/NCCL環境ってなに
MPI/NCCL環境がセットアップ済みと申されましても、ありがたさをわかっていないです。
MPI(Message Passing Interface)
複数のマシンにまたがって並列計算できる仕組み。複数の計算処理マシンのメモリ領域間で通信しながら計算。
NCCL(NVIDIA Collective Communications Library)
NVIDIA GPU向けに最適化されたライブラリ。特定のGPUインスタンスを使った演算処理するときに使える環境がインストール済みということでした。
やってみた
構築が簡単という触れ込みなのでとりあえず環境作って、なにかジョブを実行させてみましょう。
AWS ParallelClusterコマンドのインストール
pcluster
コマンドが使えるようになります。
sudo pip3 install aws-parallelcluster
バージョン確認。
pcluster version 2.7.0
コンフィグ作成
対話式でクラスタの設定ファイルを作成できます。 クラスタとは最大何台のインスタンスを起動させて計算させるとか、計算処理させるマシン郡(計算ノード)の設定の単位です。
> pcluster configure
リージョンを選択します。ap-northeast-1
を選択しました。
Allowed values for AWS Region ID: 1. ap-northeast-1 2. ap-northeast-2 3. ap-south-1 4. ap-southeast-1 5. ap-southeast-2 6. ca-central-1 7. eu-central-1 8. eu-north-1 9. eu-west-1 10. eu-west-2 11. eu-west-3 12. sa-east-1 13. us-east-1 14. us-east-2 15. us-west-1 16. us-west-2 AWS Region ID [ap-northeast-1]: 1
EC2のキーペアを選択します。既存のキーペアが候補にでてきたのそのまま使いました。
Allowed values for EC2 Key Pair Name: 1. sandbox-key EC2 Key Pair Name [sandbox-key]: 1
ジョブスケジューラを選択します。デフォルトのslurm
を使います。
Allowed values for Scheduler: 1. sge 2. torque 3. slurm 4. awsbatch Scheduler [slurm]:
OSを選択します。デフォルトのままamazon linux2
で計算ノードは常時0個で、最大10個起動するt2.micro
インスタンス。常時起動のマスタノードもt2.micro
で進めます。
Allowed values for Operating System: 1. alinux 2. alinux2 3. centos6 4. centos7 5. ubuntu1604 6. ubuntu1804 Operating System [alinux2]: Minimum cluster size (instances) [0]: Maximum cluster size (instances) [10]: Master instance type [t2.micro]: Compute instance type [t2.micro]:
AWS ParallelClusterのVPCを作ってくれるのでyes
作ります。1
が推奨構成のネットワーク構成でしたの1
を選択して進めます。
Automate VPC creation? (y/n) [n]: y Allowed values for Network Configuration: 1. Master in a public subnet and compute fleet in a private subnet 2. Master and compute fleet in the same public subnet Network Configuration [Master in a public subnet and compute fleet in a private subnet]: 1
推奨構成
クラスタの作成
コンフィグ作成後、任意の名前をつけて自分用のクラスタを作成します。一発コマンド打って5〜10分待ちです。
> pcluster create abashiri-cluster Beginning cluster creation for cluster: abashiri-cluster Creating stack named: parallelcluster-abashiri-cluster Status: parallelcluster-abashiri-cluster - CREATE_COMPLETE ClusterUser: ec2-user MasterPrivateIP: 10.0.0.10
作成できたか確認してみます。abashiri-cluster
ができていました。
> pcluster list abashiri-cluster CREATE_COMPLETE 2.7.0
AWS ParallelClusterを使ってみよう
マスタノードにログインします。pcluster ssh [作成したクラスタ名]
コマンドでssh
と同じ感じで接続できます。
> pcluster ssh abashiri-cluster -i ~/aws/sandbox-key.pem ec2-user@ip-10-0-0-10 ~]$
キューの確認
BlackBeltと公式のユーザガイドもジョブスケジューラにSGE
を使用しており、Slurm
とコマンドに互換性はなくコマンド調べるところからはじまりました。
Slurmはsqueue
でキューを確認できます。
$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
ジョブの準備
job.sh
というホスト名を返すだけのシェルスクリプトを作りました。
#!/bin/bash hostname
ジョブを登録
sbatch [スクリプト名]
コマンドでジョブとしてキューに入れます。JOBID2としてキューに登録されました。
$ sbatch job.sh Submitted batch job 2
キューに入っています。
$ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 2 compute job.sh ec2-user PD 0:00 1 (Nodes required for job are DOWN, DRAINED or reserved for jobs in higher priority partitions)
放置してたら終わってました。シェルスクリプトと同ディレクトリにslurm-[JOBID].out
として結果が返ってきてました。
計算ノードでhostname
を実行して標準出力に返した結果がマスターノードにファイルとして保存される動きをしました。
$ ll total 12 -rw-rw-r-- 1 ec2-user ec2-user 22 Jul 7 07:57 job.sh -rw-rw-r-- 1 ec2-user ec2-user 15 Jul 7 08:01 slurm-2.out
計算ノードで自動的に起動してきたホスト名が書かれていました。
$ cat slurm-2.out ip-10-0-28-153
もう一度実行
再実行したら別の計算ノードが起動してくるので、出力結果のホスト名が変わるはずです。
$ sbatch job.sh Submitted batch job 3 $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON) 3 compute job.sh ec2-user PD 0:00 1 (Nodes required for job are DOWN, DRAINED or reserved for jobs in higher priority partitions) $ squeue JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
slurm-3.out
が新たに生成されています。
$ ll total 12 -rw-rw-r-- 1 ec2-user ec2-user 22 Jul 7 07:57 job.sh -rw-rw-r-- 1 ec2-user ec2-user 15 Jul 7 08:01 slurm-2.out -rw-rw-r-- 1 ec2-user ec2-user 15 Jul 7 09:08 slurm-3.out
先程とは違う計算ノードが起動してhostname
を叩いてきたのでしょう、ホスト名が変わっています。AWS ParallelClusterを使ってなにかを実行するという目的は達成しました。
$ cat slurm-3.out ip-10-0-27-237
クラスターの削除
クラスタの後片付けもコマンドで一発です。今回の構成だとマスターノードとしてt2.micro
が常時起動しています。
> pcluster delete abashiri-cluster Deleting: abashiri-cluster Status: DynamoDBTable - DELETE_COMPLETE Deleting: abashiri-cluster Cluster deleted successfully.
おわりに
大量に計算ノード立ち上げてなにかしてみたいけど、並列プログラミングを覚えないとスパコンを活かした遊びができないと悟った。
1週間でスパコンを完全に理解する | Developers.IO